#递归函数 求阶乘

def fun(num):
    if num > 1 :
        return  num * fun(num -1 )
    else :
        return num

#匿名函数

f = lambda x:x+3
f2 = lambda x,y:x+y

#匿名函数作为普通函数的参数
def fun1(x,y,func) :
    print(f'x = {x}')
    print(f'y = {y}')
    print(func(x,y))
#闭包

def fun2(x) :
    def fun3(y) :
       return x+y
    return fun3

#正常函数计数器
def couter(stat=0,step=1) :
    return stat+1

#闭包函数计数器
def counter_cloure(x=0) :
    cut_base =[x]
    def inner_fun(step=1) :
        cut_base[0]+=step
        return cut_base[0]
    return inner_fun
#装饰器
def robot(fun) :
    def say() :
        print('亲：好呀')
        fun()
        print('结束打分额')
    return say
@robot
def say_innser():
    q= input('问：')
    print( f'暂时不会这个问题{q}')

if __name__ == '__main__' :
    print(fun(1))
    print(fun(2))
    print(fun(5))

    #调用匿名函数
    print(f(5))
    print(f2(3,7))

    #调用fun1
    fun1(x=5,y=6,func=lambda x,y:x*y)
    fun1(5,6,lambda x,y:x*y)

    #闭包函数
    print('-------闭包-------------')

    print(fun2(10)(50))

    # 正常函数计数器
    c1 = couter()
    print('第一次调用',c1)
    print('第二次调用',couter(c1))
    print('第三次调用',couter(couter(c1)))

    #闭包计数器
    couter = counter_cloure()
    print('第一次调用', couter())
    print('第二次调用', couter())
    print('第三次调用', couter())

    #修饰器

    #robot(say_innser)()
    say_innser()
